package com.hspedu.event_;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 * @author LiuJinTao
 * @className BallMove
 * @date 2024/06/20 22:19
 * @description 演示小球通过键盘控制上下左右的移动 -> 事件控制
 */
public class BallMove extends JFrame {
    MyPanel mp = null;

    public static void main(String[] args) {
        new BallMove();
    }

    public BallMove() {
        mp = new MyPanel();
        this.add(mp);
        this.setVisible(true);
        this.setSize(400, 300);
        this.addKeyListener(mp);// 窗口 JFrame 对象可以监听键盘事件
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


}

// 面板，画小球
class MyPanel extends JPanel implements KeyListener {

    // 为了让小球可以移动，把左上角的坐标设为变量
    int x = 10;
    int y = 10;

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x, y, 20, 20);
    }

    // 有字符输出时，该方法就会触发
    @Override
    public void keyTyped(KeyEvent e) {

    }

    // 当某个键按下，触发
    @Override
    public void keyPressed(KeyEvent e) {
//        System.out.println((char)e.getKeyCode() + "被按下");

        // 根据用户按下的不同键，处理小球的移动
        if (e.getKeyCode() == KeyEvent.VK_DOWN) {// KeyEvent.VK_DOWN 就是向下的箭头对应的code值
            y++;
        } else if (e.getKeyCode() == KeyEvent.VK_UP) {
            y--;
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            x--;
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            x++;
        }

        this.repaint();
    }

    // 当某个键释放(松开)，触发
    @Override
    public void keyReleased(KeyEvent e) {

    }
}